perm filename ROMITU.MF[1,3]1 blob sn#498467 filedate 1980-03-29 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00039 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00004 00002	% These upper-case Roman and Greek alphabets were prepared by D. E. Knuth in November,
C00006 00003	"Upper case Greek Gamma"
C00007 00004	"Upper case Greek Delta"
C00008 00005	"Upper case Greek Theta"
C00010 00006	"Upper case Greek Lambda"
C00011 00007	"Upper case Greek Xi"
C00013 00008	"Upper case Greek Pi"
C00014 00009	"Upper case Greek Sigma"
C00016 00010	"Upper case Greek Upsilon"
C00018 00011	"Upper case Greek Phi"
C00019 00012	"Upper case Greek Psi"
C00020 00013	"Upper case Greek Omega"
C00022 00014	"The letter A"
C00024 00015	"The letter B"
C00026 00016	"The letter C"
C00028 00017	"The letter D"
C00029 00018	"The letter E"
C00031 00019	"The letter F"
C00033 00020	"The letter G"
C00036 00021	"The letter H"
C00037 00022	"The letter I"
C00038 00023	"The letter J"
C00039 00024	"The letter K"
C00041 00025	"The letter L"
C00042 00026	"The letter M"
C00044 00027	"The letter N"
C00046 00028	"The letter O"
C00047 00029	"The letter P"
C00048 00030	"The letter Q"
C00050 00031	"The letter R"
C00052 00032	"The letter S"
C00055 00033	"The letter T"
C00056 00034	"The letter U"
C00057 00035	"The letter V"
C00058 00036	"The letter W"
C00061 00037	"The letter X"
C00063 00038	"The letter Y"
C00065 00039	"The letter Z"
C00067 ENDMK
C⊗;
% These upper-case Roman and Greek alphabets were prepared by D. E. Knuth in November,
% 1979, inspired by the Monotype alphabets used in {\sl The Art of Computer Programming}.
% For text spacing, set $\\{mi}=0$; for math spacing, set $\\{mi}=1$.
% Character codes \¬000--\¬012 and \¬101--\¬132 are generated.

new mc,lbowl,rbowl,rstem,rv,hic;	% quantities used to compute spacing
mc=mi/pu;	% converts to relative units when $\\{mi}=1$
lbowl=.3phh.slant+.5pu;	% used at left of upper-case bowl
rbowl=.7phh.slant-.5pu;	% used at right of upper-case bowl
rstem=phh.slant+(ucs+2sc-1.5)pu;	% used at right of tall stem
rv=phh.slant+(ucs+2sc-1)pu;	% used at right of tall diagonal
hic=1-.5mi;	% used when half the italic correction goes into \\{rtcorr}
"Upper case Greek Gamma";
call charbegin('000,11,2sc,sc-mc(armic-2.5pu),phh,0,mi[armic,2.5pu]);
hpen; lft4x1=round 2u; x2=x1; top4y1=hh; bot4y2=0;
w4 draw1..2;	% stem
if ucs≠0:
	call `a serif(1,4,2,-ucs);
	call `b serif(1,4,2,.5ucs);	% upper stem serif
	call `c serif(2,4,1,-ucs);
	call `d serif(2,4,1,ucs);	% lower stem serif
fi;
rt0x3=round(r-1.5u); x4=round(x3+.5u); y3=y1; y4=y3-as;
call `e arm(1,3,4).	% upper arm and serif
"Upper case Greek Delta";
call charbegin('001,15,0,0,phh,0,0);
hpen; lft0x2=round u; rt4x4=round(r-u); bot0y2=0; bot4y4=0;
top4y5=hh+o+oo; y6=y5=y8;
x6-x2=x4-x5; rt4x5=rt0x8; x6=x8-del; x1=x2; x3=x4;
vpen; bot8y1=0; y3=y1;
w9 draw 1..3;	% bar line
rpen#; w9 draw 5..4;	% erase excess at lower right
hpen; w4 draw 5..4;	% right diagonal
lpen#; w4 draw 6..2; w9 draw 6..2;	% erase excess at left
hpen; w0 draw 8..6..6..2;	% left diagonal
y7=y4; rt0x7=rt4x4;
w0 draw 2..7..7..8.	% sharpen lower right corner
"Upper case Greek Theta";
call charbegin('002,14,mc.lbowl,-mc(rbowl-pu),ph,pdd,mi[rbowl,pu]);
hpen;
if fixwidth≠0: new save; save=sqrttwo;
	new sqrttwo; sqrttwo=sqrt save; % super-superellipse
	lft5x2=round 1.5u;
else: lft5x2=round u;
fi;
x1=r-x1;	% axis of left-right symmetry
top0y1=hh+o;
bot0y2=-o; y3=y2; x3=r-x2;
call `a darc(1,2,w5);	% left part of bowl
call `b darc(1,3,w5);	% right part of bowl
lft0x4=round(rt5x2+u); x5=r-x4; y4=y5=.5[y1,y2];
vpen;
if ucs=0: w9 draw 4..5;	% bar line
else: call bar(4,5,9);	% bar line
	x6=x7=x4; x8=x9=x5; y7=y9=.6hh; y6=y8=.4hh;
	w0 draw 6..7;	% left serif
	draw 8..9;	% right serif
fi;
if fixwidth≠0: new sqrttwo; sqrttwo=save;
fi.
"Upper case Greek Lambda";
call charbegin('003,11,2sc,2sc,phh,0,0);
hpen; new w99; w99=round .5[w4,w5];
lft0x1=round 1.5u; bot0y1=0;
rt99x4=round(r-1.5u); bot99y4=0;
top0y3=top99y2=hh+o+oo;
x3-x1=x4-x2; rt99x2=rt0x3+del;
w99 draw 2..4; w0 draw 2..3;	% right diagonal stroke
lpen#; w99 draw 3..1;	% erase excess at upper left
hpen; w0 draw 3..1;	% left diagonal stroke
if ucs≠0:
	call `a dserif(1,0,3,-ucs);
	call `b dserif(1,0,3,+ucs);	% left serifs
	call `c serif(4,99,2,-ucs);
	call `d serif(4,99,2,+ucs);	% right serifs
fi.
"Upper case Greek Xi";
call charbegin('004,11,0,-.5mc(phh.slant-.5pu),phh,0,hic(phh.slant-.5pu));
new w99; 
if ucs=0: w99=w4;
else: w99=round .9[w6,w9];
fi;
vpen; top99y1=hh; y1=y2; y3=y4=good99 .5hh; bot99y5=0; y5=y6;
lft99x1=round u; rt99x2=round(r-u); x5=x1; x6=x2;
lft99x3=round 2u; rt99x4=round(r-2u);
if ucs=0: w99 draw 1..2;	% upper bar
	draw 3..4;	% middle bar
	draw 5..6;	% lower bar
else: call bar(1,2,99);	% upper bar
	call bar(3,4,99);	% middle bar
	call bar(5,6,99);	% lower bar
	new ss; ss=ucs.aspect.u+eps;
	if bot99y1-ss<top99y3+ss: new ss; bot99y1-ss=top99y3+ss+eps;
	fi;
	x7=x10=x1; x8=x9=x3; x11=x14=x2; x12=x13=x4;
	bot6y7=bot99y1-ss; top6y8=top99y3+ss;
	bot6y9=bot99y3-ss; top6y10=top99y5+ss;
	y11=y7; y12=y8; y13=y9; y14=y10;
	w6 draw 7..1; draw 11..2;	% upper serifs
	draw 8..9; draw 12..13;	% middle serifs
	draw 10..5; draw 14..6;	% lower serifs
fi.
"Upper case Greek Pi";
call charbegin('005,13,2sc,2sc-.5mc.rstem,phh,0,hic.rstem);
hpen; lft4x1=round 2u; x2=x1;
rt4x3=round(r-2u); x4=x3;
top4y1=hh; y1=y3;
bot4y2=0; y2=y4;
w4 draw 1..2;	% left stem
w4 draw 3..4;	% right stem
if ucs≠0: call `a serif(1,4,2,-ucs);
		call `b serif(1,4,2,.5ucs);	% upper left serif
	call `c serif(2,4,1,-ucs);
		call `d serif(2,4,1,ucs);	% lower left serif
	call `e serif(3,4,4,-.5ucs);
		call `f serif(3,4,4,ucs);	% upper right serif
	call `g	serif(4,4,3,-ucs);
		call `h serif(4,4,3,ucs);	% lower right serif
fi;
w0 draw 1..3.	% bar
"Upper case Greek Sigma";
call charbegin('006,13,0,sc-.5mc.armic,phh,0,hic.armic);
new w99; w99=round .25[w6,w9];
hpen; lft0x1=round u; rt0x2=round(r-1.5u); x3=round(x2+.5u);
top0y1=hh; y2=y1; y3=y2-as;
vpen; bot99y4=0; y5=y4; top6y6=top99y4; y7=y6; y8=y7+as;
x4=x6=x1; x5=x7=x2; x8=x3;
call `a arm(1,2,3);	% upper arm and serif
call `b arm(6,7,8);	% lower arm and serif
w99 draw 4..5;
if ucs=0: draw 5..8;	% thicken lower arm
else: if w0≠w4: draw |w99|5..|w6|8;	% thicken lower arm
	else: draw 5..8;	% thicken lower arm
	fi;
fi;
hpen; x9=x1; x10=.5[x9,x11]; x16=round 5u; lft4x12=lft0x15;
lft4x99=x16; rt4x99=rt0x11; lft4x13=lft0x1; rt4x13=rt0x14;
bot0y9=0; y10=.5[y9,y11]; y11=y16=.5hh; y12=y15; y13=y14=y1;
new aa,bb; lft0x15=aa[lft0x1,x16]; y15=aa[y1,y16];
lft0x15=bb[x9,x11]; y15=bb[y9,y11];
w4 draw 13..12;	% upper diagonal
w0 draw 1..15;	% sharpen upper left corner
rpen#; w4 draw 10..11;	% erase excess at right
lpen#; w99 draw 9..10;	% erase excess at left
hpen; w0 draw 9..11;	% lower diagonal
draw 14..11.	% sharpen middle corner
"Upper case Greek Upsilon";
call charbegin('007,14,mc(.8phh.slant+.5pu),-mc(.8phh.slant-3pu),
				phh,0,mi[.8phh.slant-.5pu,2.5pu]);
hpen; x1=good4 .5r; bot4y1=0; x2=x1; y2=.5hh;
w4 draw 1..2;	% stem
if ucs≠0: call `a serif(1,4,2,-1.25ucs);
	call `b serif(1,4,2,1.25ucs);	% serif
fi;
new w99; w99=round .5w4;
rt99x3=rt4x2; lft99x4=lft4x2;
lft99x5=x2-.25u; x7=x9=x13=10.5u;
vpen; rt8x11=round(r-u); y11=.8hh;
top8y13=top6y9=hh+o; bot8y13=bot6y7;
y3=y4=y5=y6=y2; y7=y8; y9=y10; y11=y12; y13=y14;
x3+x4=x5+x6=x7+x8=x9+x10=x11+x12=x13+x14;	% left-right symmetry
w9 draw 13{1,0}..11{0,-1};	% right stroke
draw 14{-1,0}..12{0,-1};	% left stroke
hpen; w99 ddraw 5{0,1}..9{1,0}, 3{0,1}..7{1,0};
ddraw 6{0,1}..10{-1,0}, 4{0,1}..8{-1,0}.	% middle strokes
"Upper case Greek Phi";
call charbegin('010,13,mc(.5phh.slant+.5pu),-mc(.5phh.slant-.5pu),
				phh,0,mi[.5phh.slant-.5pu,0]);
hpen; x1=good4 .5r; bot4y1=0; x2=x1; top4y2=hh;
w4 draw 1..2;	% stem
if ucs≠0: call `a serif(1,4,2,-ucs);
	call `b serif(1,4,2,ucs);	% upper serif
	call `c serif(2,4,1,-ucs);
	call `d serif(2,4,1,ucs);	% lower serif
fi;
x3=x1; y3=.8hh; y4=y5=.2hh;
lft5x4=round u; x3-x4=x5-x3;	% left-right symmetry
call `e darc(3,4,w5); call `f darc(3,5,w5).	% bowl
"Upper case Greek Psi";
call charbegin('011,14,mc(.8phh.slant),-.5mc(.8phh.slant-2.5pu),
				phh,0,hic(.8phh.slant-.5pu)+mi.pu);
hpen; x1=good4 .5r; bot4y1=0; x2=x1; top4y2=hh;
w4 draw 1..2;	% stem
if ucs≠0: call `a serif(1,4,2,-ucs);
	call `b serif(1,4,2,ucs);	% upper serif
	call `c serif(2,4,1,-ucs);
	call `d serif(2,4,1,ucs);	% lower serif
fi;
x3=x1; y3=.2hh; lft4x6=u; x4=good4 3u; y4=.6hh; y6=.8hh;
y4=y5; y6=y7; x3-x4=x5-x3; x3-x6=x7-x3;	% left-right symmetry
w4 draw 6{1,0}..4{0,-1}..3{1,0};	% left stroke
draw 7{-1,0}..5{0,-1}..3{-1,0}.		% right stroke
"Upper case Greek Omega";
call charbegin('012,13,mc(2/3pe.slant+.5pu),-.5mc(.75phh.slant-.5pu),
				phh,0,hic(.75phh.slant-.5pu));
hpen; top0y1=hh+o; y2=.7hh; rt5x2=rt0x8=round(r-u);
vpen; bot7y8=bot6y6=0; y4=y8; x4=x6=good0 8.5u;
x1+x1=x2+x3=x4+x5=x6+x7=x8+x9=r;	% left-right symmetry
y2=y3; y4=y5; y6=y7; y8=y9;
w7 draw 4..8;	% right bar
draw 5..9;	% left bar
lpen#; .5(x6-x7) draw 2{0,-1}..6{x6-x2,5/7(y6-y2)};	% erase middle
rpen#; .5(x6-x7) draw 3{0,-1}..7{x7-x3,5/7(y7-y3)};	% ditto
call `a arc(1,2,w5); call `b arc(1,3,w5);	% bowl
hpen; draw |w5|2{0,-1}..|w0|6{x6-x2,5/7(y6-y2)};	% right diagonal
draw |w5|3{0,-1}..|w0|7{x7-x3,5/7(y7-y3)};	% left diagonal
if ucs≠0: x12=x8; bot0y10=0; top0y12=2/3e;
	x10+x11=x12+x13=r; y10=y11; y12=y13;
	if w7=w9: x10=x12;
	else: x10+.5u=x12;
		rpen#; .5u+w0 draw 10..12;	% erase excess at right
		lpen#; .5u+w0 draw 11..13;	% erase excess at left
	fi;
	hpen; w0 draw 10..12; draw 11..13;	% serifs
fi.
"The letter A";
call charbegin(`A,13,2sc,2sc,phh,0,0);
hpen; new w99; w99=round .5[w4,w5];
lft0x1=round 1.5u; bot0y1=0;
rt99x4=round(r-1.5u); bot99y4=0;
top0y3=top99y2=hh+o+oo;
x3-x1=x4-x2; rt99x2=rt0x3+del;
w99 draw 2..4; w0 draw 2..3;	% right diagonal stroke
y5=y6=e;
new aa,bb;	% auxiliary variables for intersection of lines
x5-1=aa[x1,x3]; y5=aa[y1,y3];
x6+1=bb[x4,x2]; y6=bb[y4,y2];
w0 draw 5..6;	% bar line
lpen#; w99 draw 3..5;	% erase excess at upper left
hpen; w0 draw 3..1;	% left diagonal stroke
if ucs≠0:
	call `a dserif(1,0,3,-ucs);
	call `b dserif(1,0,3,+ucs);	% left serif
	call `c serif(4,99,2,-ucs);
	call `d serif(4,99,2,+ucs);	% right serif
fi.
"The letter B";
call charbegin(`B,12,2sc,-.5mc(.75phh.slant-.5pu),phh,0,hic(.75phh.slant-.5pu));
hpen; lft4x1=lft4x2=round 2u; top4y1=hh; 
bot4y2=0;
w4 draw1..2;	% stem
if ucs≠0:
	call `a serif(1,4,2,-ucs);
	call `b serif(1,4,2,.5ucs);	% upper serif
	call `c serif(2,4,1,-ucs);
	call `d serif(2,4,1,.5ucs);	% lower serif
fi;
x3=1/2[2u,r];  y3=y1;
rt5x4=round(r-u);  y4=good0 1/2hh;
w0 draw 1..3;	% upper bar line
call `e darc(3,4,w5);	% upper bowl
x5=x1; x6=x3+1/2u;  y4=y5=y6;
rt5x7=round(r-1/2u); bot5y7=0;
w0 draw 5..6;	% middle bar line
call `f darc(6,7,w5);	% lower bowl
x8=x6;  y8=y7;  w0 draw2..8.	% lower bar line
"The letter C";
if ucs≠0: call charbegin(`C,13,mc.lbowl,-.5mc(phh.slant-.5pu),
					phh,0,hic(phh.slant-.5pu));
else: call charbegin(`C,11,mc.lbowl,-.5mc(phh.slant-.5pu),
					phh,0,hic(phh.slant-.5pu));
fi;
hpen;
rt0x1=round(r-u); x5=x1; lft5x3=round u; x2=x4=.5r+u;
top0y2=hh+o; bot0y3=-o; y3=y4; y6=.5[y2,y4];
if ucs=0: x6=r+2u; new aa; x1=aa[x2,x6];
	y1=(sqrt(1-aa.aa))[y6,y2];
else:	if m<.6hh: y1=good6 2/3hh; else: y1=good6 m;
	fi;
	x6=x1; x7=x1; top0y7=hh; lft0x8=lft5x1; y8=y1;
	w0 ddraw 1..7,8..7;	% upper serif
	lpen#; w5 draw (6..)1..2{-1,0};	% erase spurious part
fi;
hpen; y5=hh-y1;
w0 draw (6..)1..2{-1,0};	% upper right stroke
call `a darc(2,3,w5);		% main stroke
w0 draw 4{1,0}..5(..6).		% lower right stroke
"The letter D";
call charbegin(`D,14,2sc,-mc(rbowl-.5pu),phh,0,mi[rbowl,.5pu]);
hpen; lft4x1=round 2u; x2=x1; top4y1=hh; bot4y2=0;
w4 draw1..2;	% stem
if ucs≠0:
	call `a serif(1,4,2,-ucs);
	call `b serif(1,4,2,.5ucs);	% upper serif
	call `c serif(2,4,1,-ucs);
	call `d serif(2,4,1,.5ucs);	% lower serif
fi;
x3=x4=7u; rt5x5=round(r-u);
y3=y1; y4=y5=y2;
w0 draw 1..3;	% upper bar line
call `e darc(3,5,w5);	% bowl
w0 draw 4..2.	% lower bar line
"The letter E";
call charbegin(`E,12,2sc,sc-.5mc.armic,phh,0,hic.armic);
hpen; lft4x1=round 2u; x2=x1; top4y1=hh; bot4y2=0;
w4 draw1..2;	% stem
if ucs≠0:
	call `a serif(1,4,2,-ucs);
	call `b serif(1,4,2,.5ucs);	% upper stem serif
	call `c serif(2,4,1,-ucs);
	call `d serif(2,4,1,.5ucs);	% lower stem serif
fi;
rt0x3=round(r-1.5u); x4=round(x3+.5u); y3=y1; y4=y3-as;
rt0x5=round(r-1.25u); x6=round(x4+.5u); y5=y2; y6=y5+as;
call `e arm(1,3,4);	% upper arm and serif
call `f arm(2,5,6);	% lower arm and serif
x7=x1; y7=.52[y2,y1]; y8=y7;
if ucs≠0: x8=x9=x10=good0(r-4.5u); y9=y8+.7as; y10=y8-.7as;
	if w0=w4: w0 draw 9..10;	% middle arm serif
	else: x11=x8-u; y11=y8;
		minvr 0; minvs 0;
		w0 ddraw 11{1,0}..10{0,-1}, 8..10;
		ddraw 11{1,0}..9{0,1}, 8..9;	% middle arm serif
		minvr .5; minvs .5;
	fi;
else: x8=x4-u;
fi;
w0 draw 7..8.	% middle arm
"The letter F";
call charbegin(`F,12,2sc,sc-mc(armic-2.5pu),phh,0,mi[armic,2.5pu]);
hpen; lft4x1=round 2u; x2=x1; top4y1=hh; bot4y2=0;
w4 draw1..2;	% stem
if ucs≠0:
	call `a serif(1,4,2,-ucs);
	call `b serif(1,4,2,.5ucs);	% upper stem serif
	call `c serif(2,4,1,-ucs);
	call `d serif(2,4,1,ucs);	% lower stem serif
fi;
rt0x3=round(r-1.5u); x4=round(x3+.5u); y3=y1; y4=y3-as;
call `e arm(1,3,4);	% upper arm and serif
x7=x1; y7=y8=.5[y1,y2];
if ucs≠0: x8=x9=x10=good0 7u; y9=y8+.7as; y10=y8-.7as;
	if w0=w4: w0 draw 9..10;	% lower arm serif
	else: x11=x8-u; y11=y8;
		minvr 0; minvs 0;
		w0 ddraw 11{1,0}..10{0,-1}, 8..10;
		ddraw 11{1,0}..9{0,1}, 8..9;	% lower arm serif
		minvr .5; minvs .5;
	fi;
else: x8=x4-u;
fi;
w0 draw 7..8.	% lower arm
"The letter G";
if ucs=0: if m<.6hh: call charbegin(`G,14,mc.lbowl,
						sc-mc(2/3phh.slant+(sc-1.5)pu),
						phh,0,(1-mi)(2/3phh.slant+(sc-1.5)pu));
	else: call charbegin(`G,14,mc.lbowl,
						1-mc(px.slant+(sc-1.5)pu),
						phh,0,(1-mi)(px.slant+(sc-1.5)pu));
	fi;
else: call charbegin(`G,14,mc.lbowl,
					sc-mc(phh.slant+(sc-1.5)pu),
					phh,0,(1-mi)(phh.slant+(sc-1.5)pu));
fi;
hpen;
rt0x1=rt4x9=round(r-2u); lft5x3=round u; x2=x4=7.5u;
top0y2=hh+o; bot0y3=-o; y3=y4; y6=.5[y2,y4];
if m<.6hh: y1=good6 2/3hh; else: y1=good6 m;
fi;
x6=x1; y9=good6 .1[e,m]; x9=x10;
if ucs≠0: x7=x1; top0y7=hh; lft0x8=lft5x1; y8=y1;
	w0 ddraw 1..7,8..7;	% upper serif
	lpen#; w5 draw (6..)1..2{-1,0};	% erase spurious part
fi;
hpen; w0 draw (6..)1..2{-1,0};	% upper right stroke
call `a darc(2,3,w5);		% main stroke
if w0=w4: w0 draw 4{1,0}..9{0,1};	% lower right stroke
	bot0y10=0; draw 9..10;	% stem and spur
else: y11=y10=y13=1/3y9;
	lft0x11=lft4x9;
	rt0x12=rt0x13=rt4x9; bot0y12=0;
	w0 draw 4{1,0}..11..9{0,1};	% lower right stroke
	w4 draw 9..10;	% stem
	w0 ddraw 13..12, 11{0,-1}..12{2(x12-x11),y12-y11}; % spur
fi;
if ucs<2.25: call `b serif(9,4,10,-2.25);
else: call `b serif(9,4,10,-ucs);	% lower serif
fi;
if ucs>0: call `c serif(9,4,10,+1.25);
fi.
"The letter H";
call charbegin(`H,13,2sc,2sc-.5mc.rstem,phh,0,hic.rstem);
hpen; lft4x1=round 2u; x2=x1;
rt4x3=round(r-2u); x4=x3;
top4y1=hh; y1=y3;
bot4y2=0; y2=y4;
w4 draw 1..2;	% left stem
w4 draw 3..4;	% right stem
if ucs≠0: call `a serif(1,4,2,-ucs);
		call `b serif(1,4,2,ucs);	% upper left serif
	call `c serif(2,4,1,-ucs);
		call `d serif(2,4,1,ucs);	% lower left serif
	call `e serif(3,4,4,-ucs);
		call `f serif(3,4,4,ucs);	% upper right serif
	call `g	serif(4,4,3,-ucs);
		call `h serif(4,4,3,ucs);	% lower right serif
fi;
x5=x1; x6=x3; y5=y6; y5=.52hh;
w0 draw 5..6.	% bar
"The letter I";
call charbegin(`I,6,0,-.5mc(phh.slant-.25pu),phh,0,hic(phh.slant-.25pu));
hpen; x1=x2=good4 .5r; top4y1=hh; bot4y2=0;
w4 draw 1..2;	% stem
new ss;
if ucs≠0: ss=1.25ucs; else: ss=2.25-.5w4/u;
fi;
call `a serif(1,4,2,-ss); call `b serif(1,4,2,ss);	% upper serif
call `c serif(2,4,1,-ss); call `d serif(2,4,1,ss).	% lower serif
"The letter J";
call charbegin(`J,9,0,2sc-.5mc(rstem-pu),phh,0,hic.rstem+.5mi.pu);
hpen; rt4x1=round(r-2u); top4y1=hh; y2=.2hh; x2=x1;
w4 draw 1..2;	% stem
if ucs≠0: call `a serif(1,4,2,-ucs);
	call `b serif(1,4,2,ucs);	% serif
fi;
lft0x4=lft3x5; rt3x5=round 2.75u; y4=y5=1/6hh;
x3=.5[x4,x2]; bot0y3=-o;
call `c arc(3,2,w4);	% tail
w0 draw 3{-1,0}..4{0,1}; cpen; w3 draw 5.	% bulb
"The letter K";
call charbegin(`K,14,2sc,2sc-.5mc(phh.slant+(ucs+2sc-1.5)pu),
				phh,0,hic(phh.slant+(ucs+2sc-1.5)pu));
hpen; lft4x1=round 2u; x1=x2=x5;
rt5x3=rt0x4=round(r-2u);
top4y1=top0y4=hh; bot4y2=bot5y3=0; y5=1/3hh;
new aa,bb;	% auxiliaries for intersection of lines
rt5x6=aa[rt5x1,rt5x3]; y6=aa[y1,y3];
rt5x6=bb[x5,x4]; y6=bb[y5,y4];
w5 draw 6..3;	% lower diagonal
lpen#; w5 draw 4..5;	% erase excess
hpen; w4 draw 1..2;	% stem
w0 draw 4..5; % upper diagonal
if ucs≠0: call `a serif(1,4,2,-ucs);
	call `b serif(1,4,2,ucs);	% upper stem serif
	call `c serif(2,4,1,-ucs);
	call `d serif(2,4,1,ucs);	% lower stem serif
	call `e dserif(4,0,5,-ucs);
	call `f dserif(4,0,5,ucs);	% upper diagonal serif
	call `g serif(3,5,1,-ucs);
	call `h serif(3,5,1,ucs);	% lower diagonal serif
fi.
"The letter L";
call charbegin(`L,12,2sc,sc,phh,0,0);
hpen; lft4x1=round 2u; x2=x1; top4y1=hh; bot4y2=0;
w4 draw 1..2;	% stem
if ucs≠0: call `a serif(1,4,2,-ucs);
	call `b serif(1,4,2,ucs);	% upper stem serif
	call `c serif(2,4,1,-ucs);
	call `d serif(2,4,1,.5ucs);	% lower stem serif
fi;
rt0x3=round(r-1.5u); x4=round(x3+.5u); y3=y2; y4=y3+as;
call `e arm(2,3,4).	% arm and arm serif
"The letter M";
call charbegin(`M,16,2sc-.5mc,2sc-.5mc(rstem-pu),phh,0,hic.rstem+.5mi.pu);
if fudge≠1: new w0,w4;	% lines will be thinner in fudged styles
	w0=round(fudge.pixels.pw+blacker); w4=round(fudge.pixels.pwiv+blacker);
fi;
hpen; lft0x1=round 2u; x1=x2; top0y1=hh; bot0y2=0;
new w99; w99=round .8[w0,w4];
rt99x3=round(r-2u); x3=x4; top99y3=hh; bot99y4=0;
lft99x5=lft0x1+del; lft0x6=lft99x3-del; y1=y5; y6=y3;
x7-x5=x6-x8; lft4x7=lft0x8; bot4y7=0; y8=y7;
w0 draw 5..1..1..2;	% left stem
w4 draw 5..7;	% left diagonal
rpen#; w4 draw 8..6;	% erase excess at lower right
hpen; w0 draw 8..6..6..3;	% right diagonal
w99 draw 3..4;	% right stem
if ucs≠0: call `a dserif(2,0,1,-ucs);
	call `b dserif(2,0,1,ucs);	% lower left serif
	call `c serif(5,4,7,-ucs-del/u);	% upper left serif
	call `d serif(3,99,4,ucs);	% upper right serif
	call `e serif(4,99,3,-ucs);
	call `f serif(4,99,3,ucs);	% lower right serif
fi;
if fudge≠1: new w0,w4;	% restore normal sizes in fudged styles
	w0=round(pixels.pw+blacker); w4=round(pixels.pwiv+blacker);
fi.
"The letter N";
call charbegin(`N,14,2sc,2sc-.5mc(rstem-pu),phh,0,hic.rstem+.5mi.pu);
hpen; lft0x1=round(2+.25ucs)u; x1=x2; top0y1=hh; bot0y2=0;
w0 draw 1..2;	% left stem
rt0x3=round(r-2u); x3=x4; top0y3=hh; bot0y4=0;
lft5x5=lft0x1+del; lft5x6=lft0x4-del; y1=y5; y6=y4;
draw 1..5; w5 draw 5..6; w0 draw 6..4;	% diagonal
rpen#; w5 draw 4..3;	% erase excess at lower right
hpen; w0 draw 4..3;	% right diagonal
if ucs≠0: call `a dserif(2,0,1,-ucs);
	call `b dserif(2,0,1,ucs);	% lower left serif
	call `c serif(5,5,6,-ucs-del/u);	% upper left serif
	call `d dserif(3,0,4,-ucs);
	call `e dserif(3,0,4,ucs);	% upper right serif
fi.
"The letter O";
call charbegin(`O,14,mc.lbowl,-mc(rbowl-.5pu),phh,0,mi[rbowl,.5pu]);
hpen;
if fixwidth≠0: new save; save=sqrttwo;
	new sqrttwo; sqrttwo=sqrt save; % super-superellipse
	lft5x2=round 1.5u;
else: lft5x2=round u;
fi;
x1=r-x1;	% axis of left-right symmetry
top0y1=hh+o;
bot0y2=-o; y3=y2; x3=r-x2;
call `a darc(1,2,w5);	% left part of bowl
call `b darc(1,3,w5);	% right part of bowl
if fixwidth≠0: new sqrttwo; sqrttwo=save;
fi.
"The letter P";
call charbegin(`P,12,2sc,-mc(.75phh.slant-3pu),phh,0,mi[.75phh.slant-.5pu,2.5pu]);
hpen; lft4x1=round 2u; x2=x1; top4y1=hh; bot4y2=0;
w4 draw1..2;	% stem
if ucs≠0:
	call `a serif(1,4,2,-ucs);
	call `b serif(1,4,2,.5ucs);	% upper serif
	call `c serif(2,4,1,-ucs);
	call `d serif(2,4,1,ucs);	% lower serif
fi;
x3=x4=7u; rt5x5=round(r-u); x6=x1;
y3=y1; y6=y4=y5=good6 .5hh;
w0 draw 1..3;	% upper bar line
call `e darc(3,5,w5);	% bowl
w0 draw 4..6.	% lower bar line
"The letter Q";
call charbegin(`Q,14,mc.lbowl,-mc.rbowl,phh,pdd,mi[rbowl,0]);
hpen;
if fixwidth≠0: new save; save=sqrttwo;
	new sqrttwo; sqrttwo=sqrt save; % super-superellipse
	lft5x2=round 1.5u;
else: lft5x2=round u;
fi;
x1=r-x1;	% axis of left-right symmetry
top0y1=hh+o;
bot0y2=-o; y3=y2; x3=r-x2;
call `a darc(1,2,w5);	% left part of bowl
call `b darc(1,3,w5);	% right part of bowl
x4=x5=4.5u; y4=0;
new aa; x5=aa[x1,x2]; y5=(sqrt(1-aa.aa))[.5y1+.5y2,y2];
x6=6.5u; y6=.15hh+1.5w6;
w0 draw (4..)5..6{1,0}; % left part of tail
vpen; x7=x8=x9=11u; bot8y8=bot6y9=-dd; top6y7=top8y8;
x10=round 13u; top8y10=0;
w6 ddraw 6{1,0}..7{1,0},6{1,0}..9{1,0};	% middle part of tail
w9 draw 8{1,0}..10{0,1};	% right part of tail
if fixwidth≠0: new sqrttwo; sqrttwo=save;
fi.
"The letter R";
hpen;
if ucs=0: call charbegin(`R,12.5,2sc,-mc(.75phh.slant-.75pu),
					phh,0,mi[.75phh.slant-.75pu,0]);
	rt5x5=round(r-.75u);
else: call charbegin(`R,14,2sc,0,phh,0,.75phh.slant-1.5pu);
	rt5x5=round(r-2u);
fi;
lft4x1=round 2u; x2=x1; top4y1=hh; bot4y2=0;
w4 draw1..2;	% stem
if ucs≠0:
	call `a serif(1,4,2,-ucs);
	call `b serif(1,4,2,.5ucs);	% upper serif
	call `c serif(2,4,1,-ucs);
	call `d serif(2,4,1,ucs);	% lower serif
fi;
x3=x4=7u; x6=x1;
y3=y1; y6=y4=y5=good6 .5hh;
w0 draw 1..3;	% upper bar line
call `e darc(3,5,w5);	% bowl
w0 draw 4..6;	% lower bar line
if ucs=0: rt4x7=round(r-u); bot4y7=0;
	w4 draw 4..7;	% diagonal stroke
else: x8=good5(x5-1.25u); lft5x8=lft0x7; rt5x8=rt0x9;
y7=y8=y9=1/3[y2,y4];
y13=5/6[y2,y4]; x13=1/sqrttwo[x4,x8];
draw |w0#|4{1,0}..|.25[w0,w5]|13{x8-x4,2/3(y8-y4)}..
	|w5#|8{0,-1};	% upper tail
y10=y11; bot0y10=-o; y12=.25[y2,y4];
x10=.5[x7,x12]; x11=.5[x9,x12]; rt0x12=round(r-.5u);
w0 ddraw 7{0,-1}..10{1,0}..12{0,1},
	9{0,-1}..11{1,0}..12{0,1};	% lower tail and hook
fi.
"The letter S";
call charbegin(`S,10,0,-.5mc(phh.slant-1.5pu),phh,0,hic(phh.slant-.5pu)+.5mi.pu);
new w99; w99=round .3[w0,w4];
hpen; top0y1=hh+o; bot0y5=-o;
x3=.5r; y3=.52hh; lft99x2=round u; rt99x4=round(r-u);
if ucs=0: x1=x5=x3; x6=x2; x7=x4;
	y6=1/3[top0 0,y3]; y7=1/4[bot0 hh,y3];
	w0 draw 6{x5-x6,3(y5-y6)}..5{1,0};	% lower left stroke
	draw 7{x1-x7,2(y1-y7)}..1{-1,0};	% upper right stroke
else: if w0=w4: x1=x5=x3; x6=x2; x7=x4;
		y6=1/3[top0 0,y3]; y7=1/4[bot0 hh,y3];
		w0 draw 6{x5-x6,3(y5-y6)}..5{1,0};	% lower left stroke
		draw 7{x1-x7,2(y1-y7)}..1{-1,0};	% upper right stroke
		x8=x9=x6; y9=y6+ucs.aspect.u+eps; bot0y8=0;
		x10=x11=x7; y11=y7-ucs.aspect.u-eps; top0y10=hh;
		w0 draw 8..9;	% lower serif
		draw 10..11;	% upper serif
	else: x1=x3-.5u; x5=x3+.5u; lft0x6=round u; rt0x7=round(r-1.5u);
		y6=good6 1/3hh-1; y7=good6 2/3hh+1;
		bot0y8=0; y9=y6; x8=x6; rt4x6=rt0x9;
		top0y10=hh; y11=y7; x10=x7; lft4x7=lft0x11;
		w0 ddraw 6..8,9..8;	% lower serif
		ddraw 7..10,11..10;	% upper serif
		rpen#; w4 draw 6{0,-1}..5{1,0};	% erase excess
		lpen#; w4 draw 7{0,1}..1{-1,0};	% ditto
		hpen; w0 draw 6{0,-1}..5{1,0};	% lower left stroke
		draw 7{0,1}..1{-1,0};	% upper right stroke
	fi;
fi;
call `a sdraw(1,2,3,4,5,w99,round(pixels.pwv.aspect+blacker),
				-hh/(50u)).	% middle stroke
"The letter T";
call charbegin(`T,13,sc+.75mc.phh.slant,sc-mc(armic-2.5pu),
				phh,0,mi[armic,2.5pu]);
hpen; x1=good4 6.5u; x2=x1;
top4y1=hh; bot4y2=0;
w4 draw 1..2;	% stem
if ucs≠0: call `a serif(1,4,2,-.5ucs);
	call `b serif(1,4,2,.5ucs);	% upper bracketing
	call `c serif(2,4,1,-1.25ucs);
	call `d serif(2,4,1,1.25ucs);	% lower serif
fi;
rt0x3=round(r-1.25u); x4=round(x3+.25u); y3=y1; y4=y3-as;
lft0x5=round 1.25u; x6=round(x5-.25u); y5=y1; y6=y5-as;
call `e arm(1,3,4);	% upper right arm and serif
call `f arm(1,5,6).	% upper left arm and serif
"The letter U";
call charbegin(`U,13,2sc(1-mi)+mc(.3phh.slant+pu),2sc-.5mc(rstem-pu),
				phh,0,hic.rstem+.5mi.pu);
hpen;
if fixwidth≠0: lft4x1=round(1.5u); rt0x5=round(r-1.5u);
else: lft4x1=round 2u; rt0x5=round(r-2u);
fi;
x2=x1; x4=x5; x3=.5[x2,x4];
top4y1=hh; y5=y1; y2=y4=.36hh; bot0y3=-o;
if ucs≠0: call `a serif(1,4,2,-ucs);
	call `b serif(1,4,2,ucs);	% left serif
	call `c dserif(5,0,4,-ucs);
	call `d dserif(5,0,4,ucs);	% right serif
fi;
w4 draw 1..2;	% upper left stroke
call `e arc(3,2,w4);	% lower left stroke
w0 draw 3{1,0}..4{0,1};	% lower right stroke
draw 4..5.	% upper right stroke
"The letter V";
call charbegin(`V,13,2sc+mc(phh.slant-pu),2sc-mc(rv-4pu),
				phh,0,mi[rv,4pu]);
hpen; lft4x1=round 1.5u; rt0x4=round(r-1.5u);
x2-x1=x4-x3; lft0x3=lft4x2+del;
top4y1=hh; y4=y1; bot4y2=-o-oo; y3=y2;
w4 draw 1..2; w0 draw 2..3;	% left diagonal stroke
rpen#; w4 draw 3..4;	% erase excess at lower right
hpen; w0 draw 3..4;	% right diagonal stroke
if ucs≠0: call `a serif(1,4,2,-ucs);
	call `b serif(1,4,2,ucs);	% left serif
	call `c dserif(4,0,3,-ucs);
	call `d dserif(4,0,3,ucs);	% right serif
fi.
"The letter W";
call charbegin(`W,18,2sc+mc(phh.slant-.5pu),2sc-mc(rv-.75ucs.pu-2.5pu),
				phh,0,mi[rv-.75ucs.pu,2.5pu]);
if fudge≠1: new w0,w4;	% lines will be thinner in fudged styles
	w0=round(fudge.pixels.pw+blacker); w4=round(fudge.pixels.pwiv+blacker);
fi;
hpen; lft4x1=round 1.5u;
rt0x9=rt4x10; x11-x10=x9-x1; rt0x11=r-1.5u;
% $x↓9$, $x↓{10}$, and $x↓{11}$ are approximations to $x↓4$, $x↓5$, and $x↓8$.
x5-x1=x6-x2=x7-x3=x8-x4=round(x10-x1);
% The idea is to draw two V's displaced by an integer amount.
top4y1=hh; bot4y2=-o-oo; y3=y6=y7=y2; y4=y5=y8=y1;
rt0x4=rt4x5; lft0x3=lft4x2+del; x2-x1=x4-x3;
w4 draw 1..2; w0 draw 2..3;	% first diagonal
rpen#; w4 draw 3..4;	% erase excess
hpen; w0 draw 3..4;	% second diagonal
w4 draw 5..6; w0 draw 6..7;	% third diagonal
rpen#; w4 draw 7..8;	% erase excess
hpen; w0 draw 7..8;	% fourth diagonal
if ucs≠0: call `a serif(1,4,2,-.75ucs);
	if w0=w4: call `b serif(1,4,2,ucs);
	else: call `b serif(1,4,2,.5ucs);
	fi;	% left serif
	call `c serif(5,4,6,-.5ucs-del/u);
	call `d serif(5,4,6,.5ucs);	% middle serif
	call `e dserif(8,0,7,-ucs);
	call `f dserif(8,0,7,.75ucs);	% right serif
fi;
if fudge≠1: new w0,w4;	% restore normal sizes in fudged styles
	w0=round(pixels.pw+blacker); w4=round(pixels.pwiv+blacker);
fi.
"The letter X";
call charbegin(`X,13,2sc,2sc-.5mc.rv,phh,0,hic.rv);
hpen; lft5x1=round 1.5u; rt5x4=round(r-1.5u); x3=x1; x4=x2;
top5y1=hh; bot5y4=0; y2=y1; y3=y4;
w5 draw 1..4;	% upper left to lower right diagonal
w0 draw 3..2;	% lower left to upper right diagonal
if ucs≠0: call `a serif(1,5,4,-ucs);
	call `b serif(1,5,4,ucs);	% upper left serif
	call `c serif(4,5,1,-ucs);
	call `d serif(4,5,1,ucs);	% lower right serif
	new ss; ss=.5(w5-w0)/u;	% correction to \\{ucs} makes $w↓0$ like $w↓5$
	call `e dserif(2,0,3,-ucs-ss);
	call `f dserif(2,0,3,ucs+ss);	% upper right serif
	call `g dserif(3,0,2,-ucs-ss);
	call `h dserif(3,0,2,ucs+ss);	% lower left serif
fi.
"The letter Y";
call charbegin(`Y,13,2sc+mc(phh.slant-.5pu),2sc-mc(rv-4pu),
				phh,0,mi[rv,4pu]);
hpen; lft5x1=round 1.5u; rt0x2=round(r-1.5u);
top5y1=top0y2=hh;
rt5x13=rt0x14; x13-x1=x2-x14;	% approximations before rounding
x3=good5x13; rt5x3=rt4x6=rt0x4; lft0x9=lft5x3;
y3=y4=y6=y9=.48hh; y7=y8=.5[y5,y6]; bot4y5=0;
x5=x6=x8; lft0x7=lft4x8;
w5 draw 1..3;	% left diagonal
minvr 0; minvs 0;
w0 ddraw 9{x3-x1,y3-y1}..7{0,-1}, 6..8;	% transition
minvr .5; minvs .5;
w4 draw 6..5;	% stem
w0 draw 4..2;	% right diagonal
if ucs≠0: call `a serif(1,5,3,-ucs);
	call `b serif(1,5,3,ucs);	% upper left serif
	call `c serif(5,4,6,-ucs);
	call `d serif(5,4,6,ucs);	% lower serif
	call `e dserif(2,0,4,-ucs);
	call `f dserif(2,0,4,ucs);	% upper right serif
fi.
"The letter Z";
call charbegin(`Z,11,0,-.5mc(phh.slant-1.5pu),phh,0,hic(phh.slant-.5pu)+.5mi.pu);
hpen; lft5x2=round u; rt5x1=round(r-u);
top5y1=hh; bot5y2=0;
lft0x3=round 1.5u; x4=round(x3-.5u); y3=y1; y4=y3-as;
rt0x5=round(r-1.5u); x6=round(x5+.5u); y5=y2; y6=y5+1.2as;
call `a arm(1,3,4);	% upper arm and serif
w5 draw 1..2;	% diagonal
call `b arm(2,5,6).	% lower arm and serif